home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / GW AdaEd 1.4.2 / GWAdaDemos / GWU Demos / fibb.ada < prev    next >
Text File  |  1994-01-09  |  2KB  |  61 lines

  1. --
  2. --    Program : Fibb.ada
  3. --    Author:   Charles Kann
  4. --    Purpose : This program recursively calculates a Fibonacci number.  
  5. --      A Fibonacci number is the sum of the previous two Fibonacci numbers. 
  6. --      The Fibonacci series is
  7. --          1 1 2 3 5 8 13 21 ...
  8. --
  9. --    To use with GWUMON : To use this program with GWUMON, from the command
  10. --              line type:
  11. --                       adacomp -a -b -mFibonacci fibb.ada
  12. --                       gwumon -mFibonacci
  13. --
  14. --    Take the default options on the first screen (speed = 6, exceptions = yes,
  15. --              and tasks = no) by hitting the "Esc" key.  Change from a Small
  16. --      Window to a Large Window on the second screen.
  17. --
  18. --    The purpose of this program is to show a large amount of recursion.
  19. --    Therefore, when prompted for the number to be calculated, choose 5. 
  20. --    This will cause many recursive calls of Fib_Calc.
  21. --    
  22. --    Notice that each time Fib_Calc is called, a new window is opened until
  23. --    the screen is filled with windows. At that point, no new windows are
  24. --    created, but notice that the highest level window "Scrolls" off to the
  25. --    upper right and is no longer visible.
  26. --
  27. --    When the program has gotten to the final window, notice how it begins
  28. --    to scroll the windows back on to the screen as the call stack unwinds.
  29. --    When all the programs on the stack are back on the screen, the stack
  30. --    continues to unwind, until there is only a single procedure left on
  31. --    the screen.  This shows the call stack, and the recursion of the program.
  32. --
  33. WITH Text_IO;
  34. WITH My_Int_IO;
  35. PROCEDURE Fibonacci IS
  36.   Temp : Positive;
  37.   FUNCTION Fib_Calc( Current_Num: IN Positive) RETURN Positive IS
  38.     Result: Positive;
  39.   BEGIN
  40.     Text_IO.Put("Input is ");
  41.     My_Int_IO.Put(Current_Num);
  42.     Text_IO.New_Line;
  43.     IF Current_Num = 1 OR Current_Num = 2 THEN
  44.       Result := 1;
  45.     ELSE
  46.       Result := Fib_Calc (Current_Num - 2) + Fib_Calc( Current_Num - 1 );
  47.     END IF;
  48.     Text_IO.Put("  Result is ");
  49.     My_Int_IO.Put(Result);
  50.     Text_IO.New_Line;
  51.     RETURN Result;
  52.   END Fib_Calc;
  53. BEGIN
  54.   Text_IO.Put_Line( "Enter the Fibonacci number to be calculated" );
  55.   My_Int_IO.Get( Temp );
  56.   Temp := Fib_Calc( Temp );
  57.   My_Int_IO.Put( Item => Temp );
  58.   Text_IO.New_Line;
  59. END Fibonacci;
  60.     
  61.